package cn.bearspark.article.provider.dao.mapper;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 专栏分类数据的数据映射接口
 *
 * @author f
 */
@Mapper
public interface ArticleCategoryMapper {

    /**
     * 批量添加专栏的分类数据
     *
     * @param articleId      专栏 id
     * @param userId         发布专栏的用户 id
     * @param visibility     专栏的可见性
     * @param categoryIdList 分类 id 集合
     */
    void insertBatch(long articleId, long userId, int visibility, List<Long> categoryIdList);

    /**
     * 查询指定专栏的分类 id
     *
     * @param articleId 指定的专栏 id
     * @return 指定专栏的分类 id 集合
     */
    @Select("SELECT category_id FROM t_article_category WHERE article_id = #{articleId}")
    List<Long> listCategoryId(long articleId);

    /**
     * 删除指定专栏的所有分类信息
     *
     * @param articleId 指定的专栏 id
     */
    @Delete("DELETE FROM t_article_category WHERE article_id = #{articleId}")
    void deleteByArticleId(long articleId);

    /**
     * 分页查询指定用户的指定分类下的专栏 id
     *
     * @param offset     偏移量
     * @param size       元素数
     * @param categoryId 指定的分类 id
     * @param userId     指定的用户 id
     * @return 指定用户的指定分类下的专栏 id 的集合
     */
    @Select("SELECT article_id FROM t_article_category " +
            "WHERE user_id = #{userId} AND category_id = #{categoryId} AND visibility <= #{visCode} " +
            "ORDER BY article_id DESC " +
            "LIMIT #{offset}, #{size}")
    List<Long> listUserArticleIdByCategoryId(int offset, int size, long userId, long categoryId, int visCode);
}
